//package com.mxin.install;
//
//import android.app.AlertDialog;
//import android.app.Dialog;
//import android.content.Context;
//import android.content.DialogInterface;
//import android.content.Intent;
//import android.net.Uri;
//import android.os.Build;
//import android.provider.Settings;
//import android.text.TextUtils;
//import android.util.Log;
//
//import com.mxin.ui.base.BaseActivity;
//
//import org.json.JSONObject;
//
//import java.io.File;
//import java.util.HashMap;
//
//import androidx.annotation.RequiresApi;
//
///**
// * Created by Administrator on 2019/3/8 0008.
// */
//
//public class InstallAppUtil {
//
////	public final static int INSTALL_PACKAGES_REQUESTCODE = 20;
//
//	//网络请求出现错误
//	public final static int NETWPRK_ERROR_CODE = 0;
//	//服务器数据异常
//	public final static int SERVICE_DATA_ERROR_CODE = 1;
//	//当前已经是最新版本
//	public final static int NOT_UPDATE_CODE = 2;
//	//取消更新最新版本
//	public final static int CANCEL_UPDATE_CODE = 3;
//	//下载失败
//	public final static int DOWNLOAD_FAILURE_CODE = 4;
//	//安装失败
//	public final static int INSTALL_FAILURE_CODE = 5;
//
//	static InstallAppUtil installUtil;
//	BaseActivity activity;
//	OnUpdateStatusListener statusListener;
//
//	public static InstallAppUtil getInstance(BaseActivity activity){
//		if(installUtil==null){
//			installUtil = new InstallAppUtil();
//		}
//		installUtil.activity = activity;
//		return installUtil;
//	}
//
//	public interface OnUpdateStatusListener{
//
//		//更新状态
//		void updateStatus(int status);
//
//	}
//
//	/**
//
//	 @Override
//	 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//	 super.onActivityResult(requestCode, resultCode, data);
//	 if(requestCode == 0x12){
//	 installUtil.checkIsAndroidO();
//	 }
//	 }
//	 *
//	 */
//
//	public void setStatusListener(OnUpdateStatusListener statusListener) {
//		this.statusListener = statusListener;
//	}
//
//	interface InstallAppLogic{
//
//		void checkAppVersion(InstallAppViewAbs viewAbs);
//
//
//	}
//
//	interface InstallAppViewAbs{
//
//		void showVersionDialog(String title, String content, String appDownloadUrl, boolean isMandatoryUpgrade);
//
//		void updateDownloadProgress(int progress);
//
//
//
//	}
//
//
//	/**
//	 * 检查更新
//	 */
//	public void checkAppVersion(){
//
//		activity.showLoadingView(null);
//		HashMap<String, String> params = new HashMap<>();
//		params.put("phoneModel", "1");
//		activity.requestPostUi(Constants.URL_CHECK_VERSION, params, null, new ACallback() {
//			@Override
//			public void onFailure(Exception e) {
//				if(statusListener!=null)statusListener.updateStatus(NETWPRK_ERROR_CODE);
//				activity.showToast("服务器连接错误，检查更新失败！", ToastUtil.Fail);
//				activity.dismissLoadDialog();
//			}
//
//			@Override
//			public void onSuccess(String result) {
//				JSONObject json = JsonUtil.buildDwoaJson(result);
//				int state = json.optInt("state", -1);
//				JSONObject data = JsonUtil.getJSONObject(json,"data");
//				String message = data.optString("message","");
//				if(state == 0){
//					String versionName = data.optString("versionName","");
//					int versionNumber = data.optInt("versionNumber",-1);
//					int currVersion = AppUtils.getAppVersionCode();
//					if(versionNumber == -1){
//						//获取服务器版本信息错误！
//						if(statusListener!=null)statusListener.updateStatus(SERVICE_DATA_ERROR_CODE);
//						activity.showToast("获取服务器版本信息错误！", ToastUtil.Error);
//						activity.dismissLoadDialog();
//					}else if(versionNumber > currVersion){
//						//服务器版本号大于当前版本号， 需要更新
//						String updateContent = data.optString("updateContent","");
//						String fileId = data.optString("fileId","");
//						//发现新版本  根据文件ID获取下载地址
////						updateContent += "新手指南\n" +
////								"--------\n" +
////								"0. 通过 “三分钟 Demo”（https://docs.jiguang.cn/jpush/client/Android/android_3m/） 快速把 Demo 跑起来，体验 JPush 的服务。\n" +
////								"1. 从官方路径（https://docs.jiguang.cn/jpush/resources/）下载本 SDK，或者参考 JCenter 配置指南（https://docs.jiguang.cn/jpush/client/Android/android_guide/#jcenter） 来配置 JCenter 的下载路径。\n" +
////								"2. 复制 jar 文件、so 文件以及 /res 资源文件到你项目对应的文件夹下，配置 JPush 所必须的 AndroidManifest 组件（https://docs.jiguang.cn/jpush/client/Android/android_guide/#_5）；如果是 JCenter 集成方式会自动完成这一步。\n" +
////								"3. 根据你的业务来构建通知策略。基础 api 教程见 demo 实例，详细 api 解释见：https://docs.jiguang.cn/jpush/client/Android/android_api/\n" +
////								"\n";
//						getFileDownUrl(fileId, updateContent, versionName);
//					}else{
//						//当前已经是最新版本
//						if(statusListener!=null)statusListener.updateStatus(NOT_UPDATE_CODE);
////						activity.showToast(TextUtils.isEmpty(message)?"当前已经是最新版本！":message, ToastUtil.Info);
//						activity.dismissLoadDialog();
//					}
//				}else{
//					if(statusListener!=null)statusListener.updateStatus(SERVICE_DATA_ERROR_CODE);
//					activity.showToast(TextUtils.isEmpty(message)?"获取服务器版本信息失败！":message, ToastUtil.Error);
//					activity.dismissLoadDialog();
//				}
//			}
//		});
//	}
//
//	String installAppPath;
//	UpdateVersionDialog.Builder builder;
//	UpdateVersionDialog versionDialog;
//
//	private void getFileDownUrl(final String fileId, final String content, final String newVersionName){
//		HashMap<String, String> params = new HashMap<>();
//		params.put("fileId",fileId);
//		activity.requestPostUi(Constants.URL_DOWNLOAD_FILE, params, null, new ACallback() {
//			@Override
//			public void onFailure(Exception e) {
//				if(statusListener!=null)statusListener.updateStatus(NETWPRK_ERROR_CODE);
//				activity.showToast("服务器连接错误，获取新版本下载地址失败！", ToastUtil.Fail);
//				activity.dismissLoadDialog();
//			}
//
//			@Override
//			public void onSuccess(String result) {
//				JSONObject json = JsonUtil.buildJSON(result);
//				int status = json.optInt("status",-1);
//				if(status == 0){
//					String mUpdateUrl = json.optString("url");
//					builder = new UpdateVersionDialog.Builder(activity);
//					versionDialog = builder.setTitle("发现新版本"+newVersionName+"")
//							.setContent(content)
//							.setDownUrl(mUpdateUrl)
//							.setUpdateListener(new UpdateVersionDialog.OnUpdateVersionListener() {
//								@Override
//								public void closeDialog(DialogInterface dialog) {
//									if(statusListener!=null)statusListener.updateStatus(CANCEL_UPDATE_CODE);
//									if(dialog!=null){
//										dialog.dismiss();
//									}
//								}
//
//								@Override
//								public void downSuccess(DialogInterface dialog, String filePath) {
//									activity.showToast("下载成功，正在安装！", ToastUtil.Info);
//									installAppPath = filePath;
//									checkIsAndroidO();
//								}
//
//								@Override
//								public void downFailed(DialogInterface dialog) {
//									if(statusListener!=null)statusListener.updateStatus(DOWNLOAD_FAILURE_CODE);
//									activity.showToast("下载失败！", ToastUtil.Error);
//								}
//							}).create();
//					versionDialog.show();
//				}else{
//					if(statusListener!=null)statusListener.updateStatus(SERVICE_DATA_ERROR_CODE);
//					String msg = json.optString("msg","");
//					activity.showToast(TextUtils.isEmpty(msg)?"获取新版本下载地址失败！":msg, ToastUtil.Error);
//				}
//				activity.dismissLoadDialog();
//			}
//		});
//	}
//
//	public void startDownFile(boolean permissionStatus){
//		if(permissionStatus){
//			builder.startDownFile();
//		}else{
//			if(statusListener!=null)statusListener.updateStatus(DOWNLOAD_FAILURE_CODE);
//			if(versionDialog!=null && versionDialog.isShowing()){
//				versionDialog.dismiss();
//			}
//		}
//	}
//
//
//	/**
//	 * 判断是否是8.0系统,是的话需要获取此权限，判断开没开，没开的话处理未知应用来源权限问题,否则直接安装
//	 */
//	public void checkIsAndroidO() {
//		if (Build.VERSION.SDK_INT >= 26) {
//			//PackageManager类中在Android Oreo版本中添加了一个方法：判断是否可以安装未知来源的应用
//			boolean b = activity.getPackageManager().canRequestPackageInstalls();
//			if (b) {
//				Log.e("结果", "开始安装");
//				installApp();
//				//安装应用的逻辑(写自己的就可以)
//			} else {
//				//请求安装未知应用来源的权限
//				//弹框提示用户手动打开
//				showAlert(activity, "安装权限", "需要打开允许来自此来源，请去设置中开启此权限", new DialogInterface.OnClickListener() {
//					@Override
//					public void onClick(DialogInterface dialog, int which) {
//						if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//							//此方法需要API>=26才能使用
//							toInstallPermissionSettingIntent();
//						}
//					}
//				});
//				return;
////				ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);
//			}
//		} else {
//			Log.e("结果", "版本<26，开始安装");
//			installApp();
//		}
//	}
//
//	public static final int INSTALL_PERMISS_CODE = 0x12;
//	/**
//	 * 开启安装未知来源权限
//	 */
//	@RequiresApi(api = Build.VERSION_CODES.O)
//	private void toInstallPermissionSettingIntent() {
//		Uri packageURI = Uri.parse("package:"+activity.getPackageName());
//		Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
//		activity.startActivityForResult(intent, INSTALL_PERMISS_CODE);
//	}
//
//	/**
//	 * alert 消息提示框显示
//	 * @param context   上下文
//	 * @param title     标题
//	 * @param message   消息
//	 * @param listener  监听器
//	 */
//	public static void showAlert(Context context, String title, String message, DialogInterface.OnClickListener listener){
//		AlertDialog.Builder builder = new AlertDialog.Builder(context);
//		builder.setTitle(title);
//		builder.setMessage(message);
//		builder.setPositiveButton("确定", listener);
//		builder.setCancelable(false);
//		builder.setIcon(R.mipmap.ic_launcher);
//		AlertDialog dialog = builder.create();
//		dialog.show();
//	}
//
//	public void installApp(){
//		try{
//			File appFile = new File(installAppPath);
//			if(appFile.exists() && appFile.isFile()){
//				AppUtils.installApp(installAppPath);
//			}else{
//				if(statusListener!=null)statusListener.updateStatus(INSTALL_FAILURE_CODE);
//			}
//		}catch (Exception e){
//			e.printStackTrace();
//			if(statusListener!=null)statusListener.updateStatus(INSTALL_FAILURE_CODE);
//		}
//	}
//
//	public void destroy(){
//		statusListener = null;
//		builder = null;
//		if(versionDialog!=null && versionDialog.isShowing()){
//			versionDialog.dismiss();
//		}
//		versionDialog = null;
//		activity = null;
//
//	}
//}
